
package com.xtsoft.platform.base.system.service;


import com.xtsoft.core.service.GenericService;
import com.xtsoft.core.utils.ResultMsg;
import com.xtsoft.core.utils.tree.CommonTreeNode;
import com.xtsoft.platform.base.system.domain.SysResource;
import com.xtsoft.platform.base.system.domain.SysUser;
import com.xtsoft.platform.base.system.repository.SysResourceRepository;

import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;


public interface SysResourceService extends GenericService<SysResource,String, SysResourceRepository> {
	/**
	 * 
	 * <p> 构建用户资源树  </p>  
	 * @param sysUser
	 * @return
	 * @return String
	 * @throws IntrospectionException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 * @throws SecurityException 
	 * @throws NoSuchFieldException 
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月11日 
	 * @time 下午2:10:30
	 */
	public List<CommonTreeNode> getResourceTree(SysUser sysUser) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException;
	
	/**
	 * 
	 * <p> 获取用户按钮属性资源  </p>  
	 * @param sysUser
	 * @param preResourceId
	 * @return
	 * @return List<SysResource>
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月11日 
	 * @time 上午8:21:01
	 */
	public String getResourceButton(SysUser sysUser,String preResourceId);
	/**
	 * 
	 * <p> 根据角色构建角色菜单复选框树  </p>  
	 * @param roleId
	 * @return
	 * @return String
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月11日 
	 * @time 下午2:11:12
	 */
	public List<CommonTreeNode> getResourceCheckTree(boolean needRootNode) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException;
	/**
	 * 
	 * <p> 构建所有资源树  </p>  
	 * @return
	 * @return String
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月11日 
	 * @time 下午2:12:01
	 */
	public List<CommonTreeNode> getAllResourceTree() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException;
	/**
	 * 
	 * <p> 更新保存实体，复制sysResource中的非空属性到另一sysResource中 </p>  
	 * @param sysResource 
	 * @return
	 * @return SysResource
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月11日 
	 * @time 下午2:12:34
	 */
	public SysResource saveEntity(SysResource sysResource);
	

	/**
	 * 
	 * <p> 删除资源，连带删除该资源下的所有资源，同时删除资源的已分配权限  </p>  
	 * @param resUniqueId
	 * @return void
	 * @throws  
	 * @author defencez  
	 * @date 2020年5月31日 
	 * @time 下午3:25:09
	 */
	public ResultMsg deleteResources(String resUniqueId);

	/**
	 * 
	 * <p> 根据resourceId获取菜单  </p>  
	 * @param resourceId
	 * @return
	 * @return SysResource
	 * @throws  
	 * @author litao
	 * @date 2021年10月29日 
	 * @time 下午1:24:08
	 */
	public SysResource getByResourceId(String resourceId);

	/**
	 * 
	 * <p> 根据用户和上级菜单获取子集右键菜单  </p>  
	 * @param sysUser
	 * @param preResourceId
	 * @param isView 
	 * @return
	 * @return String
	 * @throws  
	 * @author litao
	 * @date 2022年3月4日 
	 * @time 下午1:05:58
	 */
	public String getContextMenu(SysUser sysUser, String preResourceId, boolean isView);
	
}


